iT邦幫忙

2024 iThome 鐵人賽

DAY 7
1
Software Development

Unity使用教學系列 第 7

Unity_使用 Firebase Cloud Functions 自動化後端操作

  • 分享至 

  • xImage
  •  

前言
隨著應用程式規模的擴大,後端操作的自動化變得愈加重要。Firebase Cloud Functions 提供一個強大的解決方案,允許開發者在 Firebase 系統中執行後端任務。無論是用戶註冊時自動生成數據、處理支付通知,還是對資料庫變更進行即時反應,Cloud Functions 都能解決。今天,我們將深入探討如何使用 Firebase Cloud Functions 來提高應用的靈活性和效率。

1. Firebase Cloud Functions 的基本介紹
Firebase Cloud Functions 是一種無伺服器(Serverless)架構,允許開發者在雲端編寫並執行自動化任務,而不需要自己管理伺服器。這些任務可以根據特定的 Firebase 事件觸發,例如資料庫變更、身份驗證、HTTP 請求等。

主要特點:

  • 無需伺服器管理:不需要配置或維護伺服器,所有的運算資源由 Firebase 來處理。
  • 按需求執行:只在需要時執行,節省資源和成本。
  • 與 Firebase 其他服務整合:可以輕鬆地與 Firebase Authentication、Firestore、Realtime Database 等服務集成。

Cloud Functions 支援的觸發事件:

  • Firebase Authentication:例如當新用戶註冊時觸發。
  • Firebase Realtime Database 或 Firestore:當資料新增、修改或刪除時觸發。
  • Firebase Cloud Messaging (FCM):當訊息推送時觸發。
  • HTTP 請求:通過 RESTful API 來觸發。

2. 如何觸發 Firebase Cloud Functions
Firebase Cloud Functions 可以根據多種事件觸發,以下是一些常見的觸發方式:

2.1 Authentication 觸發
當新用戶註冊或刪除帳號時,可以自動執行 Cloud Functions。例如,在用戶註冊時,自動生成歡迎電子郵件或在資料庫中初始化該用戶的資料。

範例:用戶註冊時自動創建資料:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.createUserProfile = functions.auth.user().onCreate((user) => {
    const userProfile = {
        email: user.email,
        createdAt: new Date().toISOString(),
    };

    return admin.database().ref(`/users/${user.uid}`).set(userProfile);
});

觸發條件:當用戶通過 Firebase Authentication 註冊成功後,onCreate 事件將會觸發。
功能:在 Realtime Database 中為新用戶創建一個基本資料,包含用戶的電子郵件和註冊時間。

2.2 Realtime Database 觸發
當 Firebase Realtime Database 中的資料發生變更時,可以觸發 Cloud Functions 來執行某些操作。例如,當新訂單被創建時,可以發送通知或更新其他相關數據。

範例:當訂單被創建時,更新庫存數據:

exports.updateInventory = functions.database.ref('/orders/{orderId}').onCreate((snapshot, context) => {
    const order = snapshot.val();
    const productId = order.productId;
    const quantity = order.quantity;

    // 更新庫存數據
    return admin.database().ref(`/inventory/${productId}`).once('value').then((snapshot) => {
        const currentStock = snapshot.val();
        const newStock = currentStock - quantity;

        return admin.database().ref(`/inventory/${productId}`).update({ stock: newStock });
    });
});

觸發條件:當 /orders/{orderId} 路徑下有新訂單創建時觸發。
功能:根據訂單中商品的數量,更新庫存數據。

2.3 HTTP 觸發
Firebase Cloud Functions 還可以通過 HTTP 請求觸發,這樣你可以將它作為 API 來處理外部應用的請求。

範例:創建一個簡單的 HTTP API 來回應請求:

exports.helloWorld = functions.https.onRequest((req, res) => {
    res.send("Hello from Firebase!");
});

觸發條件:當有人通過 HTTP 請求訪問此 API 時觸發。
功能:回應簡單的文字訊息 "Hello from Firebase!"。

2.4 Firestore 觸發
Firestore 是 Firebase 的另一個 NoSQL 數據庫,你也可以基於 Firestore 的數據變更來觸發 Cloud Functions。

範例:當 Firestore 中的數據被新增時,進行數據校驗:

exports.validateUserData = functions.firestore.document('users/{userId}').onCreate((snap, context) => {
    const newUser = snap.data();

    if (!newUser.email || !newUser.name) {
        console.log('Invalid user data');
        return snap.ref.update({ valid: false });
    }

    return snap.ref.update({ valid: true });
});

觸發條件:當 users/{userId} 文件創建時觸發。
功能:檢查新用戶數據是否有電子郵件和姓名,並標記該數據是否有效。

3. 實際應用範例
3.1 自動發送歡迎電子郵件
當新用戶註冊時,可以自動發送一封歡迎電子郵件來加強用戶的參與度。這可以通過整合 Cloud Functions 和第三方郵件服務(如 SendGrid)來實現。

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey('SENDGRID_API_KEY');

exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => {
    const msg = {
        to: user.email,
        from: 'yourapp@example.com',
        subject: 'Welcome to Our App!',
        text: `Hi ${user.displayName || 'User'}, welcome to our app!`,
    };

    return sgMail.send(msg);
});

功能:當用戶註冊時,觸發 onCreate 事件,並通過 SendGrid API 發送一封歡迎郵件。

3.2 自動數據校驗
當資料庫或 Firestore 中新增資料時,可以通過 Cloud Functions 自動執行校驗。例如,當新訂單被創建時,可以驗證該訂單是否有效。

exports.validateOrder = functions.database.ref('/orders/{orderId}').onCreate((snapshot, context) => {
    const order = snapshot.val();

    if (!order.productId || order.quantity <= 0) {
        console.log('Invalid order data');
        return snapshot.ref.update({ valid: false });
    }

    return snapshot.ref.update({ valid: true });
});

功能:當新訂單創建時,檢查訂單數據的有效性,並標記是否有效。

4. 常見問題與解決方案
問題 1:
Cloud Functions 沒有觸發
解決方法:
1.檢查 Firebase 控制台中的 Functions 日誌,確認有無錯誤發生。
2.確認 Cloud Functions 的觸發事件和代碼邏輯是否正確。

問題 2:
函數運行超時
解決方法:
1.Firebase Cloud Functions 的默認超時時間是 60 秒,超過這個時間後,函數將被終止。如果函數需要執行
2.更長時間,可以調整超時設置,或將處理邏輯拆分為多個更小的函數。

問題 3:
HTTP 請求未返回正確結果
解決方法:
1.檢查 HTTP API 的路徑是否正確。
2.確保所有的 HTTP 請求在函數執行完畢後都調用了 res.send() 或 res.end(),以結束請求。

如果有其他問題,可以在留言區討論!


上一篇
Unity_如何設置 Firebase Realtime Database 的安全規則
下一篇
Unity_如何在 Firebase 中進行數據備份與還原
系列文
Unity使用教學15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言